package imgsei.wcj.com.commonbusiness.interfaces.service;


import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.QueryMap;
import retrofit2.http.Streaming;
import retrofit2.http.Url;
import rx.Observable;

public interface Service {
    /**
     * 带参数get请求
     *
     * @param url：地址
     * @param params：参数
     * @return：String
     */
    @GET
    Observable<String> serviceGet(@Url String url, @QueryMap Map<String, String> params);

    /**
     * 不带参数get请求
     *
     * @param url
     * @return
     */
    @GET
    Observable<String> serviceGet(@Url String url);

    /**
     * 带参数post请求
     *
     * @param url：地址
     * @param params：参数
     * @return：String
     */
    @POST
    Observable<String> servicePost(@Url String url, @QueryMap Map<String, String> params);

    /**
     * body post请求
     *
     * @param url：地址
     * @param content：请求体body
     * @return：String
     */

    @POST
    Observable<String> servicePost(@Url String url, @Body String content);

    /**
     * 表单post请求
     *
     * @param url：地址
     * @param params：表单map
     * @return：String
     */
    @FormUrlEncoded
    @POST
    Observable<String> servicePostField(@Url String url, @FieldMap Map<String, String> params);

    /**
     * 单图上传
     *
     * @param url：地址
     * @param file：文件
     * @return：String
     */
    @Multipart
    @POST
    Observable<String> upLoadFile(@Url String url, @Part MultipartBody.Part file);


    /**
     * 多图上传
     *
     * @param url：地址
     * @param description：上传名称
     * @param files：文件集合
     * @return：String
     */
    @Multipart
    @POST
    Observable<String> upLoadFiles(@Url String url, @Part("filename") String description, @PartMap Map<String, RequestBody> files);


    /**
     * 下载
     *
     * @param downloadUrl：下载地址
     * @return：String
     */
    @Streaming
    @GET
    Observable<String> downloadFile(@Url String downloadUrl);

}
